package com.zjs.common.aop;

import java.lang.annotation.*;
/*  Type 代表可以放在类上面 Method 代表可以放在方法上

@Target 说明了Annotation所修饰的对象范围：Annotation可被用于 packages、types（类、接口、枚举、Annotation类型）、类型成员（方法、构造方法、成员变量、枚举值）、方法参数和本地变量（如循环变量、catch参数）。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
　　     作用：用于描述注解的使用范围（即：被描述的注解可以用在什么地方）

        取值(ElementType)有：
        　　　　1.CONSTRUCTOR:用于描述构造器
        　　　　2.FIELD:用于描述域
        　　　　3.LOCAL_VARIABLE:用于描述局部变量
        　　　　4.METHOD:用于描述方法
        　　　　5.PACKAGE:用于描述包
        　　　　6.PARAMETER:用于描述参数
        　　　　7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
        */
//1、RetentionPolicy.SOURCE：注解只保留在源文件，当Java文件编译成class文件的时候，注解被遗弃；
//2、RetentionPolicy.CLASS：注解被保留到class文件，但jvm加载class文件时候被遗弃，这是默认的生命周期；
//3、RetentionPolicy.RUNTIME：注解不仅被保存到class文件中，jvm加载class文件之后，仍然存在；

/*    @Documented 将此注解包含在 javadoc 中 ，它代表着此注解会被javadoc工具提取成文档。*/


@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogAnnotation {
    /**
     * 模块名称
     * @return
     */
    String module() default "";

    /**
     * 操作名称
     * @return
     */
    String operator() default "";
}
